package Analizadores.Utilidades;

import java.util.ArrayList;

import Analizadores.Estructuras.Tipos.Token;


//Clase para sacar los errores por pantalla con su respectiva informacion
public class Errores {
	private ArrayList<String> listaSem;
	private boolean falloSem;
	private ArrayList<String> listaLex;
	private boolean falloLex;
	
	
	public Errores(){
		listaSem = new ArrayList<String>();
		listaLex = new ArrayList<String>();
		falloSem = false;
		falloLex = false;
	}
	
	public void escribe(String s,int numInstruccion,Token tokenActual){
			System.out.println("ERROR SINTACTICO");
			System.out.println("ERROR en la instruccion numero "+(numInstruccion+1)+" : "+ s +" Token : "+ tokenActual);
			if(falloSem || falloLex){
				imprimirFallos();
			}
			System.out.println("****CIERRE DE LA APLICACION****");
			System.exit(1);
		
	}
	public void escribeLexico(Token token){
		falloLex = true;
		String s = "Fallo lexico :  Token : "+ token;
		listaSem.add(s);
	}
	public void escribeSemantico(String cod ,int numInstruccion,Token tokenActual){
		falloSem = true;
		String s = "ERROR en la instruccion numero "+(numInstruccion+1)+" "+cod+": Fallo semantico :  Token : "+ tokenActual;
		listaSem.add(s);
	}
	public void escribeSemantico(String cod ){
		falloSem = true;
		String s = "ERROR : "+cod+" : Fallo semantico";
		listaSem.add(s);
	}
	public void imprimirFallos(){
		if(falloSem || falloLex){
			if(falloLex){
				String s = "FALLOS LEXICOS  \n";
				for(int i = 0; i<listaLex.size();i++){
					s+= listaLex.get(i);
					s+="\n";
				}
				System.out.println(s);
			
			}
			if(falloSem){
				String s = "FALLOS SEMANTICOS  \n";
				for(int i = 0; i<listaSem.size();i++){
					s+= listaSem.get(i);
					s+="\n";
				}
				System.out.println(s);
			
			}	
		System.out.println("**** CODIGO NO GENERADO ****");
		System.exit(1);
		}
	}	
}
